package main

import (
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"time"
)

var db *sql.DB

func InitMySQL() (err error) {
	dsn := "root:123456@tcp(127.0.0.1:3306)/db1"
	//去初始化全局的 DB对象，而不是新声明一个 DB变量
	db, err = sql.Open("mysql", dsn) //Open 函数只是检验参数的格式是否正确，实际上并不能创建于数据库的连接。如果要检查数据源的名称是否真实有效，应该调用 Ping 方法。
	if err != nil {
		panic(err)
		return
	}

	//尝试与数据库建立连接（校验 dsn 是否正确）
	err = db.Ping()
	if err != nil {
		fmt.Printf("connect to db failed, err: %v\n", err)
		return
	}

	//数据需要业务具体情况来确定
	db.SetConnMaxLifetime(time.Second * 10) //设置连接存活的最长时间
	db.SetMaxOpenConns(200)                 //最大连接数
	db.SetMaxIdleConns(10)                  //最大空闲连接数
	return

}

func main() {
	if err := InitMySQL(); err != nil {
		fmt.Printf("connect to db failed, err:%v\n", err)
	}

	//做完错误检查之后，确保 db 不为 nil
	//Close() 用来释放数据库连接相关的资源
	defer db.Close() //注意这行代码要写在 err 判断的下面

	fmt.Println("connect to db success")
}
